package com.example.test.utils;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.Claims;

import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Base64;
import java.util.Date;

public class JwtUtil {
	// 使用 Base64 编码的密钥字符串，或者你可以手动创建密钥
	private static final String SECRET_KEY = "your-base64-encoded-key";  // 请替换为你的密钥

	// 生成 Token
	public static String generateToken(String mobile, Integer userId) {
		Key key = getSigningKey();  // 获取签名密钥
		return Jwts.builder()
				.setSubject(mobile)
				.claim("userId", userId)
				.setIssuedAt(new Date())
				.setExpiration(new Date(System.currentTimeMillis() + 86400000)) // 24小时
				.signWith(SignatureAlgorithm.HS256, key) // 使用指定的密钥进行签名
				.compact();
	}

	// 获取签名密钥
	private static Key getSigningKey() {
		// 将 URL-safe Base64 密钥转换为标准 Base64 编码
		String base64Key = SECRET_KEY.replace('-', '+').replace('_', '/');
		byte[] keyBytes = Base64.getDecoder().decode(base64Key);  // 解码密钥
		return new SecretKeySpec(keyBytes, SignatureAlgorithm.HS256.getJcaName());
	}


	// 解析 Token
	public static Claims parseToken(String token) {
		Key key = getSigningKey();  // 获取签名密钥
		return Jwts.parser()
				.setSigningKey(key)  // 设置密钥
				.parseClaimsJws(token)  // 解析 JWT
				.getBody();  // 获取 Claims
	}
}
